<?php

require 'base.php';


class Restrizione {
	const TUTTI = 0;
	const SOLO_LOCALI = 1;
	const SOLO_EVENTI = 2;
}

class Stasera extends FBController {
	function __construct()
	{
		parent::__construct();
		$this->load->model('events_model','evento');
		$this->load->model('locali_model','locale');
	}

	///////////////////////////////////////////////////////////////
	//
	// Tipo di pagina 1: lista di locali e/o di eventi
	//
	// Usate per homepage, ricerca, pagina della categoria, etc...
	// index/cat/inizio/fine locali/cat eventi/cat/inizio/fine cerca
	//
	// TODO: ordinamento?!?
	//       paginazione locali
	//

	function locali($cat=null) { $this->index($cat, null, null, Restrizione::SOLO_LOCALI); }
	function eventi($cat=null, $inizio=null, $fine=null) { $this->index($cat, $inizio, $fine, Restrizione::SOLO_EVENTI); }
	function index($cat=null, $inizio=null, $fine=null, $restrizione=Restrizione::TUTTI)
	{
		if ($cat == 'tutti')
			$cat = null;
		$eventi = null;
		$locali = null;
		if ($cat == null) {
			if ($restrizione != Restrizione::SOLO_LOCALI)
				if ($restrizione == Restrizione::SOLO_EVENTI)
					$eventi = $this->evento->categoria(null, $inizio, $fine);
				else $eventi = $this->evento->per_home($inizio, $fine);
			if ($restrizione != Restrizione::SOLO_EVENTI)
				$locali = ($restrizione == Restrizione::SOLO_LOCALI) ? $this->locale->ultimi() : $this->locale->ultimi(4);
			$ric = "Ultime novità";
			if ($restrizione == Restrizione::SOLO_LOCALI)
				$tab = "locali";
			elseif ($restrizione == Restrizione::SOLO_EVENTI)
				$tab = "eventi";
			else $tab = "home";
		} else {
			$ric = '';
			if ($restrizione != Restrizione::SOLO_LOCALI)
				$eventi = $this->evento->categoria($cat, $inizio, $fine);
			if ($restrizione != Restrizione::SOLO_EVENTI)
				$locali = $this->locale->tutta_categoria($cat);
			$ric = ($restrizione == Restrizione::SOLO_LOCALI) ? 'Locali ' : '';
			$ric = ($restrizione == Restrizione::SOLO_EVENTI) ? 'Eventi ' : '';
			$ric .= $cat;
			$tab = $cat;
		}

		// Costruiamo i template per il filtro sulle date
		$url_tutti = site_url('stasera')
			. (($restrizione == Restrizione::SOLO_LOCALI) ? '/locali/' : (($restrizione == Restrizione::SOLO_EVENTI) ? '/eventi/' : '/index/'))
			. ($cat ? $cat.'/' : 'tutti/');
		$url_base = $url_tutti . 'DATAINIZIO/DATAFINE/';

		$this->pagina_lista($eventi, $locali, $inizio, $fine, $ric, $tab,
			array('categoria' => $cat, 'data_inizio' => $inizio, 'data_fine' => $fine,
			      'url_tutti' => $url_tutti, 'url_base' => $url_base)
		);
	}

	function cerca()
	{
		$chiave = $this->input->get("q", TRUE);
		$inizio = $this->input->get("inizio", TRUE) ? $this->input->get("inizio", TRUE) : null;
		$fine = $this->input->get("fine", TRUE) ? $this->input->get("fine", TRUE) : null;

		// Prima prova come data
		$data_fine = FALSE;
		if ($data = $this->timestamp_da_utente($chiave, FALSE, $data_fine)) {
			$this->eventi(null, date('Y-m-d', $data), date('Y-m-d', ($data_fine) ? $data_fine : $data));
			return;
		}

		switch ($chiave) {
		case null:
			redirect('');
			break;
		case 'pub':
		case 'disco':
		case 'concerti':
		case 'cinema':
		case 'cultura':
		case 'altro':
			$this->index($chiave, $inizio, $fine);
			break;
		default:
			// Costruiamo i template per il filtro sulle date
			$url_tutti = site_url('stasera/cerca') . '?q=' . urlencode($chiave);
			$url_base = $url_tutti . '&inizio=DATAINIZIO&fine=DATAFINE';
			$param_ricerca = array('ricerca' => $chiave, 'data_inizio' => $inizio, 'data_fine' => $fine,
				'url_tutti' => $url_tutti, 'url_base' => $url_base);
			$this->pagina_lista($this->evento->ricerca($chiave, $inizio, $fine),
				$this->locale->ricerca($chiave),
				$inizio, $fine,
				'Ricerca: '. $chiave, null, $param_ricerca);
		}
	}

	private function pagina_lista($eventi, $locali, $inizio, $fine, $titolo, $tab, $param_ricerca)
	{
		if (($eventi != null) && ($eventi->num_rows())) {
			$data['events'] = $eventi->result_array();
			if ($eventi->num_rows() > $this->config->item('mio_max_eventi_per_pagina')) {
				/* Raggiunto il limite massimo di eventi per pagina */
				$data['max_eventi'] = TRUE;
			}
		}

		if (($locali != null) && ($locali->num_rows()))
			$data['locali'] = $locali->result_array();

		// NB: Alle view va sempre passato l'oggetto facebook
		$data['facebook'] = $this->facebook;
		$data['data_inizio'] = $inizio;
		$data['data_fine'] = $fine;
		$data['titolo_pagina'] = $titolo;
		$data['tab'] = $tab;
		$data['param_ricerca'] = $param_ricerca;
		$data['og_properties'] = array(
			'og:title' => $titolo,
			'og:type'=>'website',
			'og:image' => base_url() . '/apple-touch-icon.png', // Generiche
			'og:description' => 'Il primo sito dedicato a eventi e locali di Pisa e dintorni!'
		);

		// Include util/lista_eventi che visualizzerà $data['events'],
		// util/lista_locali che visualizzerà $data['locali'] e util/lista_tag
		$this->load->view('home', $data);
	}

	///////////////////////////////////////////////////////////////
	//
	// Tipo di pagina 2: singolo locale o singolo evento
	//
	// locale/id/ evento/id/
	//

	function locale($id)
	{
		$info_query = $this->locale->info_di($id);
		if ($info_query->num_rows() != 1)
			show_404('locale/'.$id);
		$info = $info_query->row_array();
		$data['facebook'] = $this->facebook;
		$data['info'] = $info;
		$data['media'] = $this->locale->media_di($id);
		$data['tab'] = $info['categoria'];
		$data['titolo_pagina'] = $info['nome_locale'];
		$data['og_properties'] = array(
			'og:title' => $info['nome_locale'] . ' - staSera?',
			'og:type'=>'cafe',
			'og:image' => base_url().'/upload/'.$info['nome_logo'],
			'og:description' => $info['descrizione']
		);
		$ultimi_eventi = $this->locale->eventi_di($id);
		if ($ultimi_eventi->num_rows())
			$data['events'] = $ultimi_eventi->result_array();
		$this->load->view('locale', $data);
	}
	function evento($id)
	{
		$info_query = $this->evento->info_di($id);
		if ($info_query->num_rows() != 1)
			show_404('evento/'.$id);
		$info = $info_query->row_array();
		$data['facebook'] = $this->facebook;
		$data['info'] = $info;
		$data['media'] = $this->evento->media_di($id);
		$data['tab'] = $info['categoria'];
		$data['titolo_pagina'] = $info['nome'];
		$data['og_properties'] = array(
			'og:title' => $info['nome'] . ' - staSera?',
			'og:type'=>'event',
			'og:image' => base_url().'/upload/'.$info['nome_foto'],
			'og:description' => $info['descrizione'],
			'og:location' => ($info['location'] ? $info['location'] : '(luogo sconosciuto)'),
			'og:start_time' => strtotime($info['start_time']),
		);
		if ($info['end_time'])
			$data['og_properties']['og:end_time'] = strtotime($info['end_time']);
		if ($info['latitude'])
			$data['og_properties']['og:latitude'] = $info['latitude'];
		if ($info['longitude'])
			$data['og_properties']['og:longitude'] = $info['longitude'];
		$this->load->view('evento', $data);
	}
}
